// 请求时接口的公用部分
//公共接口地址
const ajax_url = "https://guizhou.shsm8.cn/api/";
// 前端图片地址
const ajax_url2 = "https://guizhou.shsm8.cn/static/";
// 后端图片地址
const ajax_url3 = "https://guizhou.shsm8.cn/";
// https://bqjk.weishenip.com
// 图片路径的公用部分
const img_src = "/static";
// 上传图片的接口
const add_img_url = "common/upload";
// 上传图片的name值
const file_img_name = "file";

// 上传视频的接口
const add_video_url = "上传视频的接口";
// 上传视频的name值
const file_video_name = "file";
// 上传视频的大小限制（单位：千字节）
const video_size = 10240000;


function ajax_url33() {
	return  ajax_url3;
}
// 网络请求
function ajax(fs, method, url, data, success, fail, complete) {
	let header = {
          token: get_data('vuex_token')
	};
	if (get_data('lifeData').vuex_token) {
		header['Authorization'] = get_data('lifeData').vuex_token;
	}
	if (fs == 1) {
		url = ajax_url + url;
	} else if (fs == 3) {
		url = ajax_url3 + url;
	} else {
		url = ajax_url2 + url;
	}
	request(fs, header, method, url, data, success, fail, complete);
}


function calculateDistance(lat1, lng1, lat2, lng2) {
	 var radLat1 = lat1*Math.PI / 180.0;
	 var radLat2 = lat2*Math.PI / 180.0;
	 var a = radLat1 - radLat2;
	 var b = lng1*Math.PI / 180.0 - lng2*Math.PI / 180.0;
	 var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
	 Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
	 s = s *6378.137 ;// EARTH_RADIUS;
	 s = Math.round(s * 10000) / 10000;
	 return s;	
}

	function	wx_login() {
			
			// if(!this.checkedss){
			// 	this.$.ti_shi('请勾选《用户协议》与《隐私协议》')
			// 	return;
			// }
			
			var that = this
			console.log(111,222)
			uni.login({
				"provider": "weixin",
				// "onlyAuthorize": true, // 微信登录仅请求授权认证
				success: function(event) {
					const {
						code
					} = event
					console.log(event)
					//客户端成功获取授权临时票据（code）,向业务服务器发起登录请求。
					ajax(1,"POST","/index/login",{
						code:event.code
					},(res)=>{
						console.log(res); 
						if(res.code == 200){
							set_data("vuex_token", res.data.token)
							ti_shi('登录成功');
							setTimeout(() => {
								uni.switchTab({
									url: '/pages/home/home'
								})
							}, 1000);
						}else{
							ti_shi(res.message)
							
						}
					})
				},
				fail: function(err) {
					// 登录授权失败  
					// err.code是错误码
				}
			})
		}
		
		
		
// 网络请求
function request(fs, header, method, url, data, success, fail, complete) {
	// 如果传过来的url不是一个完整的接口，就拼接上公用部分
	if (url.substring(0, 4) != "http") {
		if (fs == 1) {
			url = ajax_url + url;
		} else if (fs == 3) {
			url = ajax_url3 + url;
		} else {
			url = ajax_url2 + url;
		}
	}
	// 默认每个接口加上学校后缀
	// Object.assign(data, {
	// 	domain: "jyj",
	// 	sxh_id: 410
	// })
	// show("加载中...")
	uni.request({
		url: url,
		method: method,
		data: data,
		dataType: 'json',
		header: header,
		success: function(res) {
			// if (success) {
			// 	success(res.data);
			// }
			if (success) {
				// console.log(res.data.code)
				if(res.data.code==1){
					ti_shi('未登录，请前往登录！')
					setTimeout(() => {
						uni.reLaunch({
							url:'/pages/home/me'
						})
					}, 1000);
				}else{
					success(res.data);
				}
				
			}
		},
		fail: function(res) {
			if (fail) {
				fail(res.data);
			}
		},
		complete: function(res) {
			// hide()
			if (complete) {
				complete(res.data);
			}
		}
	})
}



// 添加图片
function add_img(length, type, success) {
	// 获取本地图片的路径
	uni.chooseImage({
		count: length, // 默认9
		sizeType: ['original', 'compressed'], // original 原图，compressed 压缩图，默认二者都有
		sourceType: ['album', 'camera'], // album 从相册选图，camera 使用相机，默认二者都有。如需直接开相机或直接选相册，请只使用一个选项
		success: function(res) {

			// 显示上传动画
			show('图片上传中...');
			// 将新添加的图片添加到imgs_arr中
			var imgs = res.tempFilePaths;
			if (imgs.length > length) {
				imgs = imgs.slice(0, length);
				uni.showToast({
					icon: 'none',
					title: '最多上传' + length + '张图片',
					duration: 2000
				});
			}
			console.log(imgs)
			// 调用上传图片的函数
			file_img(imgs, 0, type, success);
		}
	})
}
// 上传图片
function file_img(imgs, index, type, success) {
	// 如果数组长度大于下标，说明没有上传完
	console.log(index)
	console.log(imgs.length)
	if (imgs.length > index) {
		var src = imgs[index];
		// console.log(src)
		const UploadTask = uni.uploadFile({
			header: {
				token: get_data('token')
			},
			url: ajax_url + add_img_url,
			filePath: src,
			name: 'file',
			formData: {
				'type': type, //formData是指除了图片以外，额外加的字段
			},
			success: function(res) {
				success(JSON.parse(res.data));
				// 调用上传图片的函数
				file_img(imgs, index + 1, success);
			},
			fail: function(e) {
				hide();
				ti_shi("上传超时！");
			},
		})
		// 监听上传进度
		UploadTask.onProgressUpdate(function(res) {
			// ti_shi("上传成功！");
		})

	} else {
		hide();
	}
}
// 图片预览函数
function look_img(current, urls) {
	uni.previewImage({
		current: current, // 当前显示图片的https链接
		urls: urls // 需要预览的图片https链接列表
	})
}

// 防抖
let t = null;

function debounce(fn, delay ) {
	if (t !== null) {
		clearTimeout(t);
	}
	t = setTimeout(() => {
		fn()
	}, delay)
}

// 添加视频
function add_video(success1, success2) {
	// 获取本地视频的路径
	uni.chooseVideo({
		sourceType: ['album', 'camera'],
		success: (res) => {
			console.log(res);
			if (res.size > video_size) {
				let size = parseInt(video_size / 1024000);
				ti_shi("上传视频过大，大小请不要超过" + size + "M");
			} else {
				// 显示上传动画
				show("视频上传中...");
				// 调用上传视频的函数
				file_video(res.tempFilePath, success1, success2);
			}
		},
		fail: (res) => {
			alert(JSON.stringify(res));
		},
	})
}
// 上传视频
function file_video(src, success1, success2) {
	console.log("src", src);
	//上传视频
	const UploadTask = uni.uploadFile({
		url: ajax_url + add_video_url,
		filePath: src,
		name: file_video_name,
		success: (res) => {
			success1(JSON.parse(res.data));
			// 关闭上传动画
			hide();
		},
		fail: (e) => {
			// 关闭上传动画
			hide();
			ti_shi("上传超时！");
		},
	})
	if (success2) {
		// 监听上传进度
		UploadTask.onProgressUpdate(function(res) {
			success2(res.progress);
		})
	}
}

// 显示加载动画
function show(title = "加载中...", mask = true) {
	uni.showLoading({
		title: title,
		mask: mask,
	})
}
// 关闭加载动画
function hide() {
	uni.hideLoading();
}
// 提示框
function ti_shi(title, time = 1500, mask = true, icon = "none") {
	uni.showToast({
		// 提示的内容
		title: title,
		// 提示的时间
		duration: time,
		// 是否显示透明蒙层，防止触摸穿透(false)
		mask: mask,
		// 图标(success)
		icon: icon,
	})
}
// 对话框
function dui_hua(obj) {
	let showCancel = true;
	if (obj.l_show == false) {
		showCancel = false;
	}
	uni.showModal({
		// 对话框的标题(选填)
		title: obj.title || "",
		// 对话框的内容(选填)
		content: obj.content || "",
		// 是否显示左边的按钮(选填，默认显示)
		showCancel: showCancel,
		// 左边按钮的文字内容(选填，默认取消)
		cancelText: obj.l_text || "取消",
		// 左边按钮的文字颜色(选填，默认#000000)
		cancelColor: obj.l_color || "#000000",
		// 右边按钮的文字内容(选填，默认确定)
		confirmText: obj.r_text || "确定",
		// 右边按钮的文字颜色(选填，默认#3cc51f)
		confirmColor: obj.r_color || "#FD5C0A",
		success: function(res) {
			if (res.confirm) { // 点击了确定按钮
				if (obj.r_fun) {
					obj.r_fun();
				}
			} else { // 点击了取消按钮
				if (obj.l_fun) {
					obj.l_fun();
				}
			}
		}
	})
}
// 显示菜单
function menu(list, key, success, fail) {
	let arr = [];
	if (key) {
		list.forEach((obj) => {
			arr.push(obj[key]);
		})
	} else {
		arr = list;
	}
	uni.showActionSheet({
		itemList: arr,
		success: function(res) {
			let index = res.tapIndex;
			success(list[index]);
		},
		fail: function(res) {
			if (fail) {
				fail(res);
			}
		}
	});
}

// 打开一个新页面
function open(url) {
	uni.navigateTo({
		url: url
	})
}
// 关闭所有页面，然后打开一个新页面
function open_new(url) {
	uni.reLaunch({
		url: url
	});
}
// 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。
function open_tab(url) {
	uni.switchTab({
		url: url
	});
}
// 当前页打开新页面
function href(url) {
	uni.redirectTo({
		url: url
	})
}
// 页面返回
function back(delta = 1) {
	uni.navigateBack({
		delta: delta
	})
}

// 将数据存到本地
function set_data(key, data) {
	uni.setStorageSync(key, data);
}
// 从本地获取数据
function get_data(key) {
	return uni.getStorageSync(key);

}
// 同步删除本地数据
function remove_data(key) {
	uni.removeStorageSync(key);
}
// 同步清除本地数据
function clear_data() {
	uni.clearStorage();
}

// 非空验证
function is_text(text) {
	// 是否正确(默认不正确)
	let br = false;
	if (/\S/.test(text)) {
		br = true;
	}
	return br;
}
// 手机号验证
function is_phone(phone) {
	let br = true;
	if (!(/^0?(13[0-9]|14[5-9]|15[012356789]|166|17[0-9]|18[0-9]|19[8-9])[0-9]{8}$/.test(phone))) {
		ti_shi('手机号格式错误！');
		br = false
	}
	return br
}
// 中文姓名验证
function is_name(name) {
	let br = true;
	if (!(/^[\u4E00-\u9FA5]{2,10}$/.test(name))) {
		ti_shi('姓名格式错误！');
		br = false
	}
	return br
}
// 正整数验证
function is_zheng_shu(number) {
	let br = true;
	if (!(/^[1-9]\d*$/.test(number))) {
		// ti_shi('数量格式有误！');
		br = false
	}
	return br
}

// 邮箱验证
function is_email(email) {
	// 是否正确(默认不正确)
	let br = false;
	if (/^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/.test(email)) {

		br = true;
	}
	return br;
}
// 密码验证
function is_password(password) {
	// 是否正确(默认正确)
	let br = true;
	if (!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,12}$/.test(password))) {
		ti_shi('必须包含大小写字母和数字的组合，可以使用特殊字符，长度在8-12之间');
		br = false
	}
	// if (!(/^(?![^a-zA-Z]+$)(?!\D+$)/.test(password))) {
	// 	br = false
	// }
	return br
}
// 身份证验证
function is_sfz(code) {
	//身份证号合法性验证
	//支持15位和18位身份证号  
	//支持地址编码、出生日期、校验位验证  
	var city = {
		11: "北京",
		12: "天津",
		13: "河北",
		14: "山西",
		15: "内蒙古",
		21: "辽宁",
		22: "吉林",
		23: "黑龙江 ",
		31: "上海",
		32: "江苏",
		33: "浙江",
		34: "安徽",
		35: "福建",
		36: "江西",
		37: "山东",
		41: "河南",
		42: "湖北 ",
		43: "湖南",
		44: "广东",
		45: "广西",
		46: "海南",
		50: "重庆",
		51: "四川",
		52: "贵州",
		53: "云南",
		54: "西藏 ",
		61: "陕西",
		62: "甘肃",
		63: "青海",
		64: "宁夏",
		65: "新疆",
		71: "台湾",
		81: "香港",
		82: "澳门",
		91: "国外 "
	};
	let row = true;
	// ti_shi("验证成功")

	if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/.test(code)) {
		ti_shi("身份证号格式错误")
		row = false
	} else if (!city[code.substr(0, 2)]) {
		ti_shi("身份证号地址编码错误")
		row = false
	} else {
		//18位身份证需要验证最后一位校验位  
		if (code.length == 18) {
			code = code.split('');
			//∑(ai×Wi)(mod 11)  
			//加权因子  
			var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
			//校验位  
			var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
			var sum = 0;
			var ai = 0;
			var wi = 0;
			for (var i = 0; i < 17; i++) {
				ai = code[i];
				wi = factor[i];
				sum += ai * wi;
			}
			if (parity[sum % 11] != code[17].toUpperCase()) {
				ti_shi("身份证号校验位错误")
				row = false
			}
		}
	}
	return row;
}

// 复制
function copy(text) {
	// #ifdef APP-PLUS
	uni.setClipboardData({
		data: text,
		success: () => {
			ti_shi("复制成功");
		}
	});
	// #endif
	// #ifdef H5
	// 如果是H5，获取设备信息
	uni.getSystemInfo({
		success: function(res) {
			let input = document.createElement('input');
			input.type = 'text';
			input.value = text;
			input.style.position = 'fixed';
			input.style.top = "-100vh";
			input.style.left = "-100vw";
			input.style.opacity = 0;
			window.document.body.appendChild(input);
			input.select();
			if (res.platform == "ios") {
				input.setSelectionRange(0, input.value.length), document.execCommand('Copy');
			} else {
				document.execCommand("Copy");
			}
			document.body.removeChild(input);
			ti_shi("复制成功");
		}
	});
	// #endif
}

// 拨打电话
function call(phone) {
	uni.makePhoneCall({
		phoneNumber: phone,
	})
}

// ios输入框或文本框失去焦点时触发，页面自动回到顶部
function blur() {
	uni.getSystemInfo({
		success: function(res) {
			if (res.platform == "ios") {
				uni.pageScrollTo({
					scrollTop: 0,
					duration: 300
				});
			}
		}
	});
}


// 打开地图选择地址
function choose_address(success) {
	uni.chooseLocation({
		// type: 'wgs84', 
		success: function(res) {
			success({
				// 地点名称
				name: res.name,
				// 详细地址
				address: res.address,
				// 经纬度
				lng: res.longitude,
				lat: res.latitude
			});
		},
	});
}
// 打开地图
function open_map(lng, lat, name) {
	uni.openLocation({
		longitude: lng - 0,
		latitude: lat - 0,
		name: name,
	})
}

// 如果是H5
// #ifdef H5
// 微信公众号部分
// 引入微信js_sdk
// import wx from '../jweixin-module';
// #endif

// 微信js_sdk(通过config接口注入权限验证配置)
function js_sdk(success) {
	let url = location.href.split('#')[0];
	// 获取config参数
	ajax(1, "POST", "/Index/Config/jssdk", {
		url: url,
	}, (res) => {
		let data = res.data;
		wx.config({
			debug: false, // 开启调试模式
			appId: data.appId, // 必填，公众号的唯一标识
			timestamp: data.timestamp, // 必填，生成签名的时间戳
			nonceStr: data.nonceStr, // 必填，生成签名的随机串
			signature: data.signature, // 必填，签名，见附录1
			jsApiList: ["getLocation", "scanQRCode", "onMenuShareTimeline", "onMenuShareAppMessage",
				"openAddress"
			] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
		});
		// 通过ready接口处理成功验证
		wx.ready(() => {
			if (success) {
				success(wx);
			}
		});
	})
}
// 获取用户当前位置所在的经纬度
function get_lng_lat(success) {
	// #ifdef APP-PLUS || MP
	uni.getLocation({
		type: 'gcj02',
		geocode: true,
		success: (res) => {
			success({
				root: true,
				data: res,
			});
		},
		fail: (res) => {
			success({
				root: true,
			});
		},
		cancel: (res) => {
			success({
				root: true,
				data: {}
			});
		}
	});
	// #endif
	// #ifdef H5
	var ua = navigator.userAgent.toLowerCase(); //获取判断用的对象
	if (ua.match(/MicroMessenger/i) == "micromessenger") {
		//在微信中打开
		js_sdk((wx) => {
			wx.getLocation({
				type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
				success: (res) => {
					success({
						root: true,
						data: res,
					});
				},
				fail: (res) => {
					success({
						root: false,
					});
				},
				cancel: (res) => {
					success({
						root: false,
					});
				}
			});
		})
	} else {
		uni.getLocation({
			type: 'wgs84',
			success: (res) => {
				success({
					root: true,
					data: res,
				});
			},
			fail: (res) => {
				success({
					root: false,
				});
			},
			cancel: (res) => {
				success({
					root: false,
				});
			}
		});
	}
	// #endif
}
// 微信扫一扫
function sys(success) {
	// #ifdef APP-PLUS
	// 允许从相机和相册扫码
	uni.scanCode({
		success: function(res) {
			// app上还没处理过，等处理时再整理
			console.log('条码类型：' + res.scanType);
			console.log('条码内容：' + res.result);
		}
	});
	// #endif
	// #ifdef H5
	//在微信中打开
	js_sdk((wx) => {
		wx.scanQRCode({
			needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
			scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码，默认二者都有
			success: function(res) {
				if (res.resultStr) {
					success(res.resultStr);
				}
			}
		});
	})
	// #endif
}
// 获取收货地址
function get_shdz(success) {
	// #ifdef MP
	uni.chooseAddress({
		success(res) {
			success(res);
		}
	})
	// #endif
	// #ifdef H5
	js_sdk((wx) => {
		wx.openAddress({
			success: (res) => {
				success(res);
			}
		});
	})
	// #endif
}
// 分享
function fen_xiang(obj = {
	title: "标题",
	content: "内容",
	img: "",
	pages: "",
}) {
	js_sdk((wx) => {
		// 域名
		let url = location.href.split('/#/')[0];
		let fx_title = obj.title,
			fx_desc = obj.content,
			fx_url = url + '/redirect.html?app3Redirect=' + encodeURIComponent(url + "/#" + obj.pages),
			fx_img = obj.img;

		console.log({
			title: fx_title, // 分享标题
			link: fx_url, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			imgUrl: fx_img, // 分享图标
		})
		wx.onMenuShareTimeline({
			title: fx_title, // 分享标题
			link: fx_url, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			imgUrl: fx_img, // 分享图标
		});
		wx.onMenuShareAppMessage({
			title: fx_title, // 分享标题
			desc: fx_desc, // 分享描述
			link: fx_url, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			imgUrl: fx_img, // 分享图标
		});
	})
}

// 获取用户信息
function get_user_info(success) {
	ajax("POST", "/Index/business/company_info", {
		id: get_data("user_id"),
	}, (res) => {
		success(res);
	})
}



// 获取平台信息
function get_config(success) {
	ajax("POST", "/Index/config/config_info", {}, (res) => {
		if (res.code == 1) {
			success(res.data);
		} else {
			ti_shi(res.info);
		}
	})
}

// 从聊天记录中上传文件
function lx_sc_wj(success) {
	wx.chooseMessageFile({
		count: 1,
		type: 'file',
		success(res) {
			success(res)
		}
	})
}

// 相机扫码事件
function scanCode(success) {
	// 只允许通过相机扫码
	uni.scanCode({
		onlyFromCamera: true,
		success: (res) => {
			console.log(res)
			let str = res.result;
			let product_o = JSON.parse(str);
			if (typeof product_o.product_id === 'undefined') {

			}
			ajax(1, "POST", "/api/tiny-shop/v1/product/product/before", {
				id: product_o.product_id,
			}, (res) => {
				if (res.code == 200) {
					if (res.data.id > 0) {
						open("/pages/index/djs_jf?order_id=" + res.data.id)
					} else {
						open("/pages/index/confirm?id=" + product_o.product_id)
					}


				} else {
					success(res);
				}
			})

		},
	});
}

// 相机扫码事件
function scanCodeNoModel(success) {
	// 只允许通过相机扫码
	uni.scanCode({
		onlyFromCamera: true,
		success: (res) => {
			let str = res.result;
			let product_o = JSON.parse(str);
			ajax(1, "POST", "/api/tiny-shop/v1/product/product/open", {
				id: product_o.product_id,
				is_confirm: 1
			}, (res) => {
				success(res);
			})

		},
	});
}

function formatTime(time) {
	/* if (typeof time !== 'number' || time < 0) {
		return time
	} */
	var hour = parseInt(time / 3600)
	time = time % 3600
	var minute = parseInt(time / 60)
	time = time % 60
	var second = time
	return ([hour, minute, second]).map(function(n) {
		n = n.toString()
		return n[1] ? n : '0' + n
	}).join(':')
}

module.exports = {
	// 防抖
	debounce,
	// 请求的url
	ajax_url,
	// 请求的url
	ajax_url2,
	
	
	// 网络请求
	ajax,

	// 图片路径的公用部分
	img_src,
	// 添加图片
	add_img,
	// 图片预览函数
	look_img,

	// 添加视频
	add_video,

	// 显示加载动画
	show,
	// 关闭加载动画
	hide,
	// 提示框
	ti_shi,
	// 对话框
	dui_hua,
	// 显示菜单
	menu,

	// 打开一个新页面
	open,
	// 关闭所有页面，然后打开一个新页面
	open_new,
	// 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面。
	open_tab,
	// 当前页打开新页面
	href,
	// 页面返回
	back,

	// 将数据存到本地
	set_data,
	// 从本地获取数据
	get_data,
	// 同步删除本地数据
	remove_data,
	// 同步清除本地数据
	clear_data,

	// 非空验证
	is_text,
	// 手机号验证
	is_phone,
	// 验证姓名
	is_name,
	//验证正整数
	is_zheng_shu,
	// 邮箱验证
	is_email,
	// 密码验证
	is_password,
	// 身份证验证
	is_sfz,

	// 复制
	copy,
	// 拨打电话
	call,
	// ios输入框或文本框失去焦点时触发，页面自动回到顶部
	blur,

	// 打开地图选择地址
	choose_address,
	// 打开地图
	open_map,

	// 获取用户当前位置所在的经纬度
	get_lng_lat,
	// 微信扫一扫
	sys,
	// 获取收获地址
	get_shdz,
	// 分享
	fen_xiang,

	// 获取用户信息
	get_user_info,
	// 获取平台信息
	get_config,
	//从聊天记录上传文件
	lx_sc_wj,
	//相机扫码事件
	scanCode,
	scanCodeNoModel,
	formatTime,
	calculateDistance,
	wx_login,
	
	ajax_url33,
	
}